// 引入net模块
const net = require('net')
// 引入node:readline/promises模块
const readLine = require('node:readline/promises')

// 创建readline接口
const rl = readLine.createInterface({
  input: process.stdin,
  output: process.stdout,
})

// 定义移动光标函数
const moveCursor = (dx, dy) => {
  // 返回一个Promise对象
  return new Promise((resolve) => {
    // 移动光标
    process.stdout.moveCursor(dx, dy, () => {
      // 解析Promise
      resolve()
    })
  })
}

// 定义清除行函数
const clearLine = (dir) => {
  // 返回一个Promise对象
  return new Promise((resolve) => {
    // 清除行
    process.stdout.clearLine(dir, () => {
      // 解析Promise
      resolve()
    })
  })
}

// 定义id变量
let id

// 创建socket连接
const socket = net.createConnection({ port: 3008, host: '127.0.0.1' }, () => {
  console.log('Connected to server')

  // 定义ask函数
  const ask = async () => {
    // 读取用户输入
    const message = await rl.question('Enter a message: ')
    // 移动光标
    await moveCursor(0, -1)
    // 清除行
    await clearLine(0)
    // 发送消息
    socket.write(`${id}-message-${message}`)
    // 递归调用ask函数
    ask()
  }
  // 调用ask函数
  ask()

  // 监听socket数据
  socket.on('data', async (data) => {
    // 判断数据是否为id
    if (data.toString('utf-8').substring(0, 2) === 'id') {
      // 获取id
      id = data.toString('utf-8').substring(3)
      console.log()
      // 移动光标
      await moveCursor(0, -1)
      // 清除行
      await clearLine(0)
      // 打印id
      console.log('Your id is:', id)
    } else {
      // message
      console.log()
      // 移动光标
      await moveCursor(0, -1)
      // 清除行
      await clearLine(0)
      // 打印消息
      console.log(data.toString('utf-8'))
    }
    // 递归调用ask函数
    ask()
  })
})
